<?php

/**抽象产品角色   汉堡
 * Interface IHanbao
 * 工厂方法模式核心工厂类不再负责所有产品的创建
 * 而是将具体创建的工作交给子类去做，成为一个抽象工厂角色
 * 仅负责给出具体工厂类必须实现的接口
 * 而不接触哪一个产品类应当被实例化这种细节
 */
interface IHanbao
{
    function Allay();
}

/**具体产品角色         肉松汉堡
 * Class RouSongBao
 */
class RouSongBao implements IHanbao
{
    function Allay()
    {
        echo "I am 肉松汉堡，小的给主人解饿了！<br/>";
    }

}

/**鸡肉汉堡
 * Class ChickenBao
 */
class ChickenBao implements IHanbao
{
    function Allay()
    {
        echo "I am 鸡肉汉堡，小的给主人解饿了！<br/>";
    }

}

/**抽象工厂角色
 * Interface IServerFactory
 */
interface IServerFactory
{
    function MakeHanbao();
}

/**具体工厂角色     肉松汉堡工厂
 * Class RouSongFactory
 */
class RouSongFactory implements IServerFactory
{

    function MakeHanbao()
    {
        return new RouSongBao();
    }
}

class ChickenFactory implements IServerFactory
{

    function MakeHanbao()
    {
        return new ChickenBao();
    }
}

//测试代码
header("Content-Type:text/html;charset=utf-8");

//-----------------餐厅厨师-----------
$chickenFactory=new ChickenFactory();
$rouSongFactory=new RouSongFactory();

//-----------点餐------------
$chicken1=$chickenFactory->MakeHanbao();
$chicken2=$chickenFactory->MakeHanbao();
$rouSong1=$rouSongFactory->MakeHanbao();
$rouSong2=$rouSongFactory->MakeHanbao();

//------------------顾客吃饭---------
$chicken1->Allay();
$chicken2->Allay();
$rouSong1->Allay();
$rouSong2->Allay();